#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int a[400005];    // 第一列
int b[400005];    // 第二列
int c[400005];    // c[i]表示第一列第i个位置对应的第二列的数值
int qpow(int x) { // 2的x次幂，快速幂算法（也可以不用，直接循环求）

  if (x == 0)
    return 1;
  long long ret = qpow(x / 2);
  if (x % 2 == 0)
    return ret * ret % mod;
  else
    return 2 * ret * ret % mod;
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
      cin >> b[i];
    }
    for (int i = 1; i <= n; i++) { // 初始化c数组
      c[a[i]] = b[i];
    }
    int cnt = 0; // 环的个数
    for (int i = 1; i <= n; i++) {
      if (c[i] != 0) {      // 不在已有的环中
        cnt++;              // 增加一个环
        int t = c[i];       // 当前终点
        int s = c[i];       // 起点
        while (c[t] != s) { // 没环回来就继续
          int x = c[t];     // 记录下一个位置
          c[t] = 0;         // 标记已在环中
          t = x;            // 去下一个位置
        }
      }
    }
    cout << qpow(cnt) << endl; // 快速幂求答案
  }
  return 0;
}